/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nys.conci.cliente.bean;

import com.nys.conci.base.BeanBase;
import com.nys.conci.base.excepcion.ExcepcionManager;
import com.nys.conci.base.utilitario.FechaUtil;
import com.nys.conci.citas.servicio.ServicioControlCitas;
import com.nys.conci.cliente.entidad.Pago;
import com.nys.conci.cliente.entidad.Persona;
import com.nys.conci.cliente.entidad.PlanCliente;
import com.nys.conci.cliente.entidad.PlanPago;
import com.nys.conci.cliente.modelo.ModeloPagoClientes;
import com.nys.conci.cliente.modelo.ModeloPlanCliente;
import com.nys.conci.cliente.modelo.ModeloPlanPago;
import com.nys.conci.usuario.servicio.ServicioAdministracion;
import com.nys.conci.usuario.servicio.ServicioControlUsuario;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;

/**
 *
 * @author Yeudy10
 */
@ManagedBean
@ViewScoped
public class BeanPagosClientes extends BeanBase {

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<     VARIABLES     >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    @Inject
    private ServicioControlUsuario scu;
    @Inject
    private ServicioControlCitas scc;
    @Inject
    private ServicioAdministracion sa;
    private List<Persona> listado_persona_cliente;
    private List<PlanPago> listado_planes;
    private List<ModeloPlanCliente> lista_plan_cliente;
    private List<ModeloPagoClientes> lista_pagos;
    private ModeloPlanCliente modelo_tabla;
    private ModeloPlanCliente modelo_select;
    private Persona persona_cliente_tabla;
    private Persona persona_cliente_select;
    private ModeloPlanPago plan_tabla;
    private String identificacion_c;
    private String dscCliente;
    private Integer id_plan;
    private BigDecimal total;
    private boolean habilitar;

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<  INICIALIZARORES  >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * Constructor
     */
    public BeanPagosClientes() {
        this.inicializar();
    }

    /**
     * Inicializa las variables del bean, al acceder al constructor
     */
    private void inicializar() {
        try {
            modelo_tabla = new ModeloPlanCliente();
            setPlan_tabla(new ModeloPlanPago());
            persona_cliente_tabla = new Persona();
            total = BigDecimal.ZERO;
            habilitar = true;
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    /**
     * Inicializas las variables y atributos del bean, despues del llamado del
     * constructor. Es utilizado para las inicializaciones que utilicen datos de
     * objetos injectados.
     */
    @Override
    @PostConstruct
    public void inicializarPost() {
        cargarClientes();
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      MÉTODOS      >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    public void cargarClientes() {
        try {
            listado_persona_cliente = new ArrayList<Persona>();
            listado_persona_cliente = scu.consultarPersonas("C");
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void cargarPlanes(String id) {
        try {
            List<PlanCliente> lista_pc = new ArrayList<PlanCliente>();
            listado_planes = new ArrayList<PlanPago>();
            lista_pc = sa.consultarListaPlanesPagoCliente(id);
            for (PlanCliente planCliente : lista_pc) {                
                PlanPago pp = new PlanPago();
                pp = sa.consultarPlanPago(planCliente.getId_plan_pago());
            listado_planes.add(pp);
            }
            
            if(listado_planes != null && !listado_planes.isEmpty()) {
                habilitar = false;
            } else {
                habilitar = true;
            }
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void cargarPagoCliente() {
        try {
            total = BigDecimal.ZERO;
            lista_pagos = new ArrayList<ModeloPagoClientes>();
            PlanCliente pc = sa.consultarPlanCliente(id_plan, identificacion_c);
            Integer id_plan_p = (pc != null && pc.getId_plan_pago() != null && pc.getId_plan_pago() != 0) ? pc.getId_plan_cliente() : null;
            List<Pago> lista = new ArrayList<Pago>();
            lista = scc.consultarListaPagosCliente(identificacion_c, id_plan_p);
            for (Pago pago : lista) {
                ModeloPagoClientes modelo = new ModeloPagoClientes();
                modelo.setEspecialidad(sa.consultarEspecialidad(pago.getId_especialidad()).getNombre());
                modelo.setMonto(pago.getMonto());
                modelo.setFecha(FechaUtil.convertirFecha(pago.getFecha(), "dd/MM/yyyy"));
                if(pago.getId_plan_pago() != null && pago.getId_plan_pago() != 0) {
                    modelo.setPlan_pago(scc.consultarPlanPagoCliente(pago.getId_plan_pago()).getNombre());
                }         
                modelo.setNombre_cliente(pago.getIdentificacion());
                total = total.add(pago.getMonto());
                lista_pagos.add(modelo);
            }
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void seleccionarCliente() {
        try {
            persona_cliente_select = persona_cliente_tabla;
            identificacion_c = persona_cliente_select.getIdentificacion();
            dscCliente = persona_cliente_select.getNombre() + " " + persona_cliente_select.getApellido1() + " " + persona_cliente_select.getApellido2();
            persona_cliente_select = new Persona();
            persona_cliente_tabla = new Persona();
            cargarPlanes(identificacion_c);
            cargarPagoCliente();            
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }
    
    public void seleccionarPlanCliente() {
        try {
            cargarPagoCliente();
        } catch(Exception ex){
            ExcepcionManager.manejarExcepcion(ex);
        }
            
    }

    public void limpiar() {
        listado_planes = new ArrayList<PlanPago>();
        identificacion_c = "";
        dscCliente = null;
        lista_pagos = new ArrayList<ModeloPagoClientes>();
        habilitar = true;
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      GET & SET      >>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * @return the listado_persona_cliente
     */
    public List<Persona> getListado_persona_cliente() {
        return listado_persona_cliente;
    }

    /**
     * @param listado_persona_cliente the listado_persona_cliente to set
     */
    public void setListado_persona_cliente(List<Persona> listado_persona_cliente) {
        this.listado_persona_cliente = listado_persona_cliente;
    }

    /**
     * @return the listado_planes
     */
    public List<PlanPago> getListado_planes() {
        return listado_planes;
    }

    /**
     * @param listado_planes the listado_planes to set
     */
    public void setListado_planes(List<PlanPago> listado_planes) {
        this.listado_planes = listado_planes;
    }

    /**
     * @return the identificacion_c
     */
    public String getIdentificacion_c() {
        return identificacion_c;
    }

    /**
     * @param identificacion_c the identificacion_c to set
     */
    public void setIdentificacion_c(String identificacion_c) {
        this.identificacion_c = identificacion_c;
    }

    /**
     * @return the id_plan
     */
    public Integer getId_plan() {
        return id_plan;
    }

    /**
     * @param id_plan the id_plan to set
     */
    public void setId_plan(Integer id_plan) {
        this.id_plan = id_plan;
    }

    /**
     * @return the persona_cliente_tabla
     */
    public Persona getPersona_cliente_tabla() {
        return persona_cliente_tabla;
    }

    /**
     * @param persona_cliente_tabla the persona_cliente_tabla to set
     */
    public void setPersona_cliente_tabla(Persona persona_cliente_tabla) {
        this.persona_cliente_tabla = persona_cliente_tabla;
    }

    /**
     * @return the persona_cliente_select
     */
    public Persona getPersona_cliente_select() {
        return persona_cliente_select;
    }

    /**
     * @param persona_cliente_select the persona_cliente_select to set
     */
    public void setPersona_cliente_select(Persona persona_cliente_select) {
        this.persona_cliente_select = persona_cliente_select;
    }

    /**
     * @return the lista_plan_cliente
     */
    public List<ModeloPlanCliente> getLista_plan_cliente() {
        return lista_plan_cliente;
    }

    /**
     * @param lista_plan_cliente the lista_plan_cliente to set
     */
    public void setLista_plan_cliente(List<ModeloPlanCliente> lista_plan_cliente) {
        this.lista_plan_cliente = lista_plan_cliente;
    }

    /**
     * @return the modelo_tabla
     */
    public ModeloPlanCliente getModelo_tabla() {
        return modelo_tabla;
    }

    /**
     * @param modelo_tabla the modelo_tabla to set
     */
    public void setModelo_tabla(ModeloPlanCliente modelo_tabla) {
        this.modelo_tabla = modelo_tabla;
    }

    /**
     * @return the modelo_select
     */
    public ModeloPlanCliente getModelo_select() {
        return modelo_select;
    }

    /**
     * @param modelo_select the modelo_select to set
     */
    public void setModelo_select(ModeloPlanCliente modelo_select) {
        this.modelo_select = modelo_select;
    }

    /**
     * @return the dscCliente
     */
    public String getDscCliente() {
        return dscCliente;
    }

    /**
     * @param dscCliente the dscCliente to set
     */
    public void setDscCliente(String dscCliente) {
        this.dscCliente = dscCliente;
    }

    /**
     * @return the plan_tabla
     */
    public ModeloPlanPago getPlan_tabla() {
        return plan_tabla;
    }

    /**
     * @param plan_tabla the plan_tabla to set
     */
    public void setPlan_tabla(ModeloPlanPago plan_tabla) {
        this.plan_tabla = plan_tabla;
    }

    /**
     * @return the lista_pagos
     */
    public List<ModeloPagoClientes> getLista_pagos() {
        return lista_pagos;
    }

    /**
     * @param lista_pagos the lista_pagos to set
     */
    public void setLista_pagos(List<ModeloPagoClientes> lista_pagos) {
        this.lista_pagos = lista_pagos;
    }

    /**
     * @return the total
     */
    public BigDecimal getTotal() {
        return total;
    }

    /**
     * @param total the total to set
     */
    public void setTotal(BigDecimal total) {
        this.total = total;
    }

    /**
     * @return the habilitar
     */
    public boolean isHabilitar() {
        return habilitar;
    }

    /**
     * @param habilitar the habilitar to set
     */
    public void setHabilitar(boolean habilitar) {
        this.habilitar = habilitar;
    }
}
